package cn.bytengine.stem.contexts;

import java.util.Map;

/**
 * <p>
 * 上下文代理，它自身没有任何context实现。
 * </p>
 * <br />
 * <p>
 * 代理上下文，允许运行时变更代理。主要应用场景在于业务操作对象不变的情况下，可以切换上下文内容。
 * </p>
 * <p>
 * 该实现并不处理并发问题，因此需要单独处理并发情况数据访问。
 * </p>
 */
public class ProxyContext implements Context {
    private Context context;

    public ProxyContext(Context context) {
        this.context = context;
    }

    public Context setProxy(Context context) {
        this.context = context;
        return this;
    }

    @Override
    public Object get(String key) {
        return context.get(key);
    }

    @Override
    public <T> T getByType(String key, Class<T> type) {
        return context.getByType(key, type);
    }

    @Override
    public String getString(String key) {
        return context.getString(key);
    }

    @Override
    public Integer getInteger(String key) {
        return context.getInteger(key);
    }

    @Override
    public Long getLong(String key) {
        return context.getLong(key);
    }

    @Override
    public Boolean getBoolean(String key) {
        return context.getBoolean(key);
    }

    @Override
    public Context set(String key, Object value) {
         context.set(key, value);
         return this;
    }

    @Override
    public Context set(Map<String, Object> data) {
        context.set(data);
        return this;
    }

    @Override
    public boolean has(String key) {
        return context.has(key);
    }

    @Override
    public Context remove(String key) {
        context.remove(key);
        return this;
    }

    @Override
    public Context parent() {
        return context.parent();
    }

    @Override
    public boolean hasParent() {
        return context.hasParent();
    }
}
